package com.szbmyoubao.app.wxapi

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import com.ellecity06.common.utils.ToastUtils
import com.ellecity06.common.utils.gson
import com.ellecity06.common.utils.logD
import com.szbmyoubao.app.helper.ShareHelper
import com.google.gson.Gson
import com.tencent.mm.opensdk.constants.ConstantsAPI
import com.tencent.mm.opensdk.modelbase.BaseReq
import com.tencent.mm.opensdk.modelbase.BaseResp
import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram
import com.tencent.mm.opensdk.openapi.IWXAPI
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler
import com.tencent.mm.opensdk.openapi.WXAPIFactory

class WXEntryActivity : Activity(), IWXAPIEventHandler {
    private lateinit var api: IWXAPI
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        api = WXAPIFactory.createWXAPI(this, ShareHelper.Companion.WECHAT_APPID_OUR, false)
        //第三方开发者如果使用透明界面来实现WXEntryActivity，需要判断handleIntent的返回值，如果返回值为false，则说明入参不合法未被SDK处理，应finish当前透明界面，避免外部通过传递非法参数的Intent导致停留在透明界面，引起用户的疑惑
        try {
            if (!api.handleIntent(intent, this)) {
                finish()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    override fun onReq(baseReq: BaseReq) {

    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        setIntent(intent)
        api.handleIntent(intent, this)
    }

    override fun onResp(resp: BaseResp) {
        logD("WXEntryActivity 回调=${gson.toJson(resp)}")
        if (resp.type == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
            try {
                val launchMiniProResp = resp as WXLaunchMiniProgram.Resp
                //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
                val extraData = launchMiniProResp.extMsg
                val data = Gson().fromJson(extraData, CommonData::class.java)
                if (data == null) {
                    //           支付失败
                } else {
                    /**
                     * 一个是没支付 直接回app 传0
                     * 二是 进行支付 成功 app 回传 1
                     * 三是 进行支付 失败 app 回传 2
                     */
                    if (!TextUtils.isEmpty(data.status) && data.status.equals("1")) {
                        // 支付成功
                    } else {
                        var error = "支付失败"
                        if (TextUtils.isEmpty(data.status)) {
                            data.msg = "支付失败"
                            error = "支付失败"
                        } else if (data.status.equals("0")) {
                            data.msg = "用户取消支付"
                            error = "用户取消支付"
                        } else if (data.status.equals("2")) {
                            data.msg = "支付失败"
                            error = "支付失败"
                        }
                        // 支付失败
                        ToastUtils.show(error)
                    }
                }
            } catch (e: Exception) {
                logD("", tr = e)
            }

        }
        finish()
    }

    companion object {
        private const val TAG = "WXEntryActivity"
    }
}